package com.junsi.app.common.util;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Map;

/**
 * 模板解析实体类
 */

/**
 * @Author: gtguoyin
 * @Description:
 * @Date: Created in 9:30  2019/7/10
 **/
public class TemplateParseUtil {

    /**
     * 解析模板生成Excel
     *
     * @param templateDir  模板目录
     * @param templateName 模板名称
     * @param excelPath    生成的Excel文件路径
     * @param data         数据参数
     * @throws IOException
     * @throws TemplateException
     */
    public static boolean parse(String templateDir, String templateName, String excelPath, Map<String, Object> data) throws IOException, TemplateException {
        //初始化工作
        Configuration cfg = new Configuration();
        //设置默认编码格式为UTF-8
        cfg.setDefaultEncoding("UTF-8");
        //全局数字格式
        cfg.setNumberFormat("0.00");
        //设置模板文件位置
        cfg.setDirectoryForTemplateLoading(new File(templateDir));
        cfg.setObjectWrapper(new DefaultObjectWrapper());
        //加载模板
        Template template = cfg.getTemplate(templateName, "utf-8");
        try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(excelPath), "UTF-8")) {
            //填充数据至Excel
            template.process(data, writer);
            writer.flush();
        }

        return true;
    }

    /**
     * 解析模板生成Excel
     *
     * @param templateName 模板名称
     * @param excelPath    生成的Excel文件路径
     * @param data         数据参数
     * @throws IOException
     * @throws TemplateException
     */
    public static boolean getTemplate(String templateName, String excelPath, Map<String, Object> data) throws IOException, TemplateException {
        //初始化工作
        Configuration cfg = new Configuration();
        //设置默认编码格式为UTF-8
        cfg.setDefaultEncoding("UTF-8");
        //全局数字格式
        cfg.setNumberFormat("0.00");
        //设置模板文件位置
        String templatePath = TemplateParseUtil.class.getResource("/").getPath()+"/templates";
        cfg.setDirectoryForTemplateLoading(new File(templatePath));
        cfg.setObjectWrapper(new DefaultObjectWrapper());
        //加载模板
        Template template = cfg.getTemplate(templateName, "utf-8");
        try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(excelPath), "UTF-8")) {
            //填充数据至Excel
            template.process(data, writer);
            writer.flush();
        }

        return true;
    }

}
